package hottargui.domain.gamma;

import hottargui.domain.*;
import hottargui.domain.alpha.*;
import hottargui.domain.beta.*;
import hottargui.domain.standard.*;


public class GammaGameFactoryImpl implements GameFactory{

	private DeckOfCards _deck;
	private RollDiceStrategy _diceStrategy;
	private ShuffleStrategy _shuffleStrategy;


	public GammaGameFactoryImpl() {
		_shuffleStrategy = new StandardShuffleStrategyImpl();
		_deck = new GammaDeckOfCardsImpl(_shuffleStrategy);
		_diceStrategy = new StandardDiceStrategy();


	}


	public GammaGameFactoryImpl(DeckOfCards deck) {
		_shuffleStrategy = new StandardShuffleStrategyImpl();
		_deck = deck;
		_diceStrategy = new StandardDiceStrategy();
	}



	public GammaGameFactoryImpl(RollDiceStrategy diceStrategy, CollectionOfCardsStrategy c, ShuffleStrategy shuffleStrategy) {
		_deck = new GammaDeckOfCardsImpl(c, shuffleStrategy);
		_diceStrategy = diceStrategy;
		_shuffleStrategy = shuffleStrategy;
	}



	public Board createBoard() {
		return new StandardBoard(new AlphaBoardLayoutStrategyImpl());
	}


	public EndRoundStrategy createEndRoundStrategy(StateMachine sm) {
		return new GammaEndRoundStrategyImpl(sm, _deck);
	}


	public WinnerStrategy createWinnerStrategy(StateMachine sm) {
		return new BetaWinnerStrategyImpl(sm.getBoard());
	}



	public RoundSequenceStrategy createRoundSequenceStrategy(StateMachine sm) {
		return new GammaRoundSequenceStrategyImpl(sm, _deck);
	}



	public PlaceUnitsStrategy createPlaceUnitsStrategy() {
		return new AlphaPlaceUnitsStrategyImpl();
	}


	public AttackStrategy createAttackStrategy() {
		return new AlphaAttackStrategy();
	}

	public MoveToBuyStrategy createMoveToBuyStrategy() {
		return new AlphaMoveToBuyStrategyImpl();
	}


	public RollDiceStrategy createRollDiceStrategy() {
		return _diceStrategy;
	}


	public AfterDieRollActionStrategy createAfterDieRollActionStrategy(StateMachine sm) {
		return new GammaAfterDieRollActionStrategyImpl(sm, _shuffleStrategy); 
	}


	public String getWindowTitle() {
		return "Hottargui Gamma Variant";
	}

}

